<%-- 
    Document   : compositions
    Created on : 15.05.2011, 14:17:12
    Author     : 647_2
--%>

<%@page import="Entities.User"%>
<%@page import="Access.UsersRemote"%>
<%@page import="ExtEntities.ExtAlbum"%>
<%@page import="Entities.Genre"%>
<%@page import="Entities.Album"%>
<%@page import="Access.AlbumsRemote"%>
<%@page import="Access.GenresRemote"%>
<%@page import="Access.GroupsRemote"%>
<%@page import="Entities.Group"%>
<%@page import="Access.CompositionsRemote"%>
<%@page import="ExtEntities.VeryExtComposition"%>
<%@page import="java.util.LinkedList"%>
<%@page import="ExtEntities.ExtComposition"%>
<%@page import="javax.naming.InitialContext"%>
<%@page import="params.Params"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

        <%
                   int mode = 0;
                   int ID = 0;
                   int _page = 0;
                   String title = "";
                   LinkedList<ExtComposition> comps = new LinkedList<ExtComposition>();
                   VeryExtComposition vcomp = new VeryExtComposition();
                   int start = 0;

                   if (request.getParameter("mode") != null){
                     mode = Integer.parseInt(request.getParameter("mode"));
                   } else {
                     mode = 0;
                   }

                   InitialContext ic = new InitialContext();
                   CompositionsRemote r = (CompositionsRemote)ic.lookup(CompositionsRemote.class.getName());
                   GroupsRemote gr = (GroupsRemote)ic.lookup(GroupsRemote.class.getName());
                   GenresRemote ge = (GenresRemote)ic.lookup(GenresRemote.class.getName());
                   AlbumsRemote al = (AlbumsRemote)ic.lookup(AlbumsRemote.class.getName());
                   UsersRemote us = (UsersRemote)ic.lookup(UsersRemote.class.getName());

                   switch (mode){
                       case 1: //group
                           if (request.getParameter("page") != null){
                             _page = Integer.parseInt(request.getParameter("page"));
                           } else {
                             _page = 1;
                           }

                           if (request.getParameter("ID") != null){
                             ID = Integer.parseInt(request.getParameter("ID"));
                           } else {
                             ID = 0;
                           }

                           if (ID == 0){
                               title = "Выберите группу для вывода композиций";
                           } else {

                             start = (_page - 1) * 10;

                             comps = r.getCompositionsByGroupID(ID, start, 10);
                             Group group = gr.getGroup(ID);

                             title = "Список всех композиций группы " + group.get_name() + ", страница " + _page;
                           }
                         break;

                       case 2: //album
                           if (request.getParameter("page") != null){
                             _page = Integer.parseInt(request.getParameter("page"));
                           } else {
                             _page = 1;
                           }

                           if (request.getParameter("ID") != null){
                             ID = Integer.parseInt(request.getParameter("ID"));
                           } else {
                             ID = 0;
                           }

                           if (ID == 0){
                               title = "Выберите альбом для вывода композиций";
                           } else {

                           start = (_page - 1) * 10;

                           ExtAlbum album = al.getAlbum(ID);

                           comps = r.getCompositionsByAlbumID(ID, start, 10);

                           title = "Список всех композиций альбома" + album.getName() + ", страница " + _page;

                           }
                         break;

                       case 3: //genre
                           if (request.getParameter("page") != null){
                             _page = Integer.parseInt(request.getParameter("page"));
                           } else {
                             _page = 1;
                           }

                           if (request.getParameter("ID") != null){
                             ID = Integer.parseInt(request.getParameter("ID"));
                           } else {
                             ID = 0;
                           }

                          if (ID == 0){
                               title = "Выберите жанр для вывода композиций";
                           } else {

                           start = (_page - 1) * 10;

                           Genre genre = ge.getGenre(ID);

                           comps = r.getCompositionsByGenreID(ID, start, 10);

                           title = "Список всех композиций жанра " + genre.get_name() + ", страница " + _page;
                           }
                         break;

                       case 4: //one
                           if (request.getParameter("ID") != null){
                             ID = Integer.parseInt(request.getParameter("ID"));
                           } else {
                             ID = 0;
                           }

                           vcomp = r.getFullComposition(ID);

                           title = "Подробная информация о композиции " + vcomp.getName();
                         break;

                       case 0: //all
                       default:
                           if (request.getParameter("page") != null){
                             _page = Integer.parseInt(request.getParameter("page"));
                           } else {
                             _page = 1;
                           }

                           start = (_page - 1) * 10;

                           comps = r.getAllCompositions(start, 10);

                           title = "Список всех композиций, страница " + _page;
                        break;
                   }

        %>

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title><% out.print(title + " - " + Params.getSiteName()); %></title>
    </head>
    <body>
        <% out.print(Params.getHeader(title)); %>
        <%

               
               switch (mode){
                   
                   case 4:

                       if (vcomp != null){

                       out.println("<a href=\"" + Params.getSiteURL() + "editcomposition.jsp?mode=2&ID=" + vcomp.getID() + "\">[править]</a><br />");
                       out.println("Название композиции: " + vcomp.getName() + ", ID в базе композиций: " + vcomp.getID() + "<br />");
                       out.println("Продолжительность композиции: " + Params.getMinSec(vcomp.getDuration()) + "<br />");
                       out.println("Группы, написавшие композицию: ");
                       for (int j = 0; j < vcomp.getGroups().size(); j++){
                               if (j < vcomp.getGroups().size() - 1){
                                    out.println("<a href=\"" + Params.getSiteURL() + "groups.jsp?mode=1&ID=" + vcomp.getGroups().get(j).getIDAsInt() + "\">" + vcomp.getGroups().get(j).get_name() + "</a>, ");
                               } else {
                                    out.println("<a href=\"" + Params.getSiteURL() + "groups.jsp?mode=1&ID=" + vcomp.getGroups().get(j).getIDAsInt() + "\">" + vcomp.getGroups().get(j).get_name() + "</a>");
                               }
                       }
                       out.println("<br />Альбомы, в которых находится композиция: ");
                       for (int j = 0; j < vcomp.getAlbums().size(); j++){
                               if (j < vcomp.getAlbums().size() - 1){
                                    out.println("<a href=\"" + Params.getSiteURL() + "albums.jsp?mode=2&ID=" + vcomp.getAlbums().get(j).getIDAsInt() + "\">" + vcomp.getAlbums().get(j).get_name() + "</a>, ");
                               } else {
                                    out.println("<a href=\"" + Params.getSiteURL() + "albums.jsp?mode=2&ID=" + vcomp.getAlbums().get(j).getIDAsInt() + "\">" + vcomp.getAlbums().get(j).get_name() + "</a>");
                               }
                       }
                       out.println("<br />Жанры, которым принадлежит композиция: ");
                       for (int j = 0; j < vcomp.getGenres().size(); j++){
                               if (j < vcomp.getGenres().size() - 1){
                                    out.println(vcomp.getGenres().get(j).get_name() + ", ");
                               } else {
                                    out.println(vcomp.getGenres().get(j).get_name());
                               }
                       }
                       out.println("<br />Исполнители композиции: ");
                       for (int j = 0; j < vcomp.getEwis().size(); j++){
                               if (j < vcomp.getEwis().size() - 1){
                                    out.println("<a href=\"" + Params.getSiteURL() + "executors.jsp?mode=1&ID=" + vcomp.getEwis().get(j).get_executor().getIDAsInt() +"\">" + vcomp.getEwis().get(j).get_executor().get_FIO() + "</a> (" + vcomp.getEwis().get(j).get_instrument().get_name() + "), ");
                               } else {
                                    out.println("<a href=\"" + Params.getSiteURL() + "executors.jsp?mode=1&ID=" + vcomp.getEwis().get(j).get_executor().getIDAsInt() +"\">" + vcomp.getEwis().get(j).get_executor().get_FIO() + "</a> (" + vcomp.getEwis().get(j).get_instrument().get_name() + ")");
                               }
                       }
                       out.println("<br />Ссылки на композицию: ");
                       for (int j = 0; j < vcomp.getUrls().size(); j++){
                               if (j < vcomp.getUrls().size() - 1){
                                    out.println("<a href=\"" + vcomp.getUrls().get(j).get_URL() + "\" target=\"_blank\">" + (j+1) + "</a>, ");
                               } else {
                                    out.println("<a href=\"" + vcomp.getUrls().get(j).get_URL() + "\" target=\"_blank\">" + (j+1) + "</a>");
                               }
                       }
                       if (vcomp.getRating() != -1.0){
                            out.println("<br />Рейтинг композиции: " + vcomp.getRating());
                       } else {
                            out.println("<br />Рейтинг композиции: пока ещё нет голосов");
                       }
                       out.println("<br /><br />Комментарии к композиции: <br /><br />");

                       for (int j = 0; j < vcomp.getRvs().size(); j++){
                               if (j < vcomp.getRvs().size() - 1){
                                    out.println("<a href=\"" + Params.getSiteURL() + "users.jsp?mode=2&ID=" + vcomp.getRvs().get(j).get_ID() + "\">" + vcomp.getRvs().get(j).get_user().get_login() + "</a>: " + vcomp.getRvs().get(j).get_comment() + " (" + vcomp.getRvs().get(j).get_numberOfRating() + " из 10)<br />");
                               } else {
                                    out.println("<a href=\"" + Params.getSiteURL() + "users.jsp?mode=2&ID=" + vcomp.getRvs().get(j).get_ID() + "\">" + vcomp.getRvs().get(j).get_user().get_login() + "</a>: " + vcomp.getRvs().get(j).get_comment() + " (" + vcomp.getRvs().get(j).get_numberOfRating() + " из 10)");
                               }
                       }



                       LinkedList<User> users = us.getAllUsers();

                       if (users != null){

                           out.println("<br /><br />Выставить оценку: <br />");

                             out.println("<form action=\"" + Params.getSiteURL() + "editcomposition.jsp?mode=13&ID=" + vcomp.getID() + "\" method=\"POST\">");
                             out.print("Выберите имя: <select name=\"uID\">");

                             for (int i = 0; i < users.size(); i++){
                                   out.print("<option value=\"" + users.get(i).getIDAsInt() + "\">" + users.get(i).get_login() + "</option>");
                             }

                             out.print("</select><br />");

                             out.print("Оценка: <select name=\"rating\">");

                             for (int i = 0; i <= 10; i++){
                                   out.print("<option value=\"" + i + "\">" + i + "</option>");
                             }

                             out.print("</select><br />");

                             out.println("Ваш комментарий: <input type=\"text\" name=\"comment\" value=\"\"/>");

                             out.println("<input type=\"submit\" value=\"Добавить\"/><br />");
                             out.println("</form>");

                       }

                       } else {
                          out.println("Данная композиция не найдена в базе");
                       }
                     break;
                   case 0:
                   case 1:
                   case 2:
                   case 3:
                   default:
                       out.println("Показать: <a href=\"" + Params.getSiteURL() + "compositions.jsp?mode=0&ID=0&page=1\">[все]</a> <a href=\"" + Params.getSiteURL() + "compositions.jsp?mode=1&ID=0&page=1\">[по группе]</a> <a href=\"" + Params.getSiteURL() + "compositions.jsp?mode=2&ID=0&page=1\">[по альбому]</a> <a href=\"" + Params.getSiteURL() + "compositions.jsp?mode=3&ID=0&page=1\">[по жанру]</a>");
                       out.println("<a href=\"" + Params.getSiteURL() + "editcomposition.jsp?mode=0\">[добавить новую композицию]</a><br />");

                       if (mode == 1){
                             LinkedList<Group> groups = gr.getAllGroups();
                             out.println("<form action=\"" + Params.getSiteURL() + "compositions.jsp?mode=1&page=1\" method=\"GET\">");
                             out.print("Выберите группу: <select name=\"ID\">");

                             for (int i = 0; i < groups.size(); i++){
                                   out.print("<option value=\"" + groups.get(i).getIDAsInt() + "\">" + groups.get(i).get_name() + "</option>");
                             }

                             out.print("</select>");
                             out.println("<input type=\"submit\" value=\"Показать\"/>");
                             out.println("<input type=\"hidden\" name=\"mode\" value=\"1\"/>");
                             out.println("<input type=\"hidden\" name=\"page\" value=\"1\"/>");
                             out.println("</form>");
                       }

                       if (mode == 2){
                             LinkedList<ExtAlbum> albums = al.getAllAlbums();
                             out.println("<form action=\"" + Params.getSiteURL() + "compositions.jsp\" method=\"GET\">");
                             out.print("Выберите группу: <select name=\"ID\">");

                             for (int i = 0; i < albums.size(); i++){
                                   out.print("<option value=\"" + albums.get(i).getID() + "\">" + albums.get(i).getName() + "</option>");
                             }

                             out.print("</select>");
                             out.println("<input type=\"submit\" value=\"Показать\"/>");
                             out.println("<input type=\"hidden\" name=\"mode\" value=\"2\"/>");
                             out.println("<input type=\"hidden\" name=\"page\" value=\"1\"/>");
                             out.println("</form>");
                       }

                       if (mode == 3){
                             LinkedList<Genre> genres = ge.getAllGenres();
                             out.println("<form action=\"" + Params.getSiteURL() + "compositions.jsp?mode=1&page=1\" method=\"GET\">");
                             out.print("Выберите группу: <select name=\"ID\">");

                             for (int i = 0; i < genres.size(); i++){
                                   out.print("<option value=\"" + genres.get(i).getIDAsInt() + "\">" + genres.get(i).get_name() + "</option>");
                             }

                             out.print("</select>");
                             out.println("<input type=\"submit\" value=\"Показать\"/>");
                             out.println("<input type=\"hidden\" name=\"mode\" value=\"3\"/>");
                             out.println("<input type=\"hidden\" name=\"page\" value=\"1\"/>");
                             out.println("</form>");
                       }

                       if (comps != null){

                       out.println("<table><tr><td><b>ID</b></td><td><b>Название</b></td><td><b>Продолжительность</b></td><td><b>Группы</b></td><td><b>Альбомы</b></td><td><b>Жанры</b></td></tr>");
                       for (int i = 0; i < comps.size(); i++){
                           out.println("<tr><td><a href=\"compositions.jsp?mode=4&ID=" + comps.get(i).getID() + "\">" + comps.get(i).getID() + "</a></td><td><a href=\"compositions.jsp?mode=4&ID=" + comps.get(i).getID() + "\">" + comps.get(i).getName() + "</a></td><td>" + Params.getMinSec(comps.get(i).getDuration()) + "</td><td>");
                           for (int j = 0; j < comps.get(i).getGroups().size(); j++){
                               if (j < comps.get(i).getGroups().size() - 1){
                                    out.println("<a href=\"" + Params.getSiteURL() + "groups.jsp?mode=1&ID=" + comps.get(i).getGroups().get(j).getIDAsInt() + "\">" + comps.get(i).getGroups().get(j).get_name() + "</a>, ");
                               } else {
                                    out.println("<a href=\"" + Params.getSiteURL() + "groups.jsp?mode=1&ID=" + comps.get(i).getGroups().get(j).getIDAsInt() + "\">" + comps.get(i).getGroups().get(j).get_name() + "</a>");
                               }
                           }
                           out.println("</td><td>");
                           for (int j = 0; j < comps.get(i).getAlbums().size(); j++){
                               if (j < comps.get(i).getAlbums().size() - 1){
                                    out.println("<a href=\"" + Params.getSiteURL() + "albums.jsp?mode=2&ID=" + comps.get(i).getAlbums().get(j).getIDAsInt() + "\">" + comps.get(i).getAlbums().get(j).get_name() + "</a>, ");
                               } else {
                                    out.println("<a href=\"" + Params.getSiteURL() + "albums.jsp?mode=2&ID=" + comps.get(i).getAlbums().get(j).getIDAsInt() + "\">" + comps.get(i).getAlbums().get(j).get_name() + "</a>");
                               }
                           }
                           out.println("</td><td>");
                           for (int j = 0; j < comps.get(i).getGenres().size(); j++){
                               if (j < comps.get(i).getGenres().size() - 1){
                                    out.println(comps.get(i).getGenres().get(j).get_name() + ", ");
                               } else {
                                    out.println(comps.get(i).getGenres().get(j).get_name());
                               }
                           }
                           out.println("</td><tr>");
                       }
                       out.println("</table>");

                       LinkedList<ExtComposition> tempcomp = r.getAllCompositions();

                       int pages = tempcomp.size() / 10;
                       if ((tempcomp.size() % 10) > 0){pages++;}

                       for (int i = 1; i <= pages; i++){
                          if (_page == i){
                              out.print("<b>[" + i + "]</b> ");
                          } else {
                              out.print("<a href=\"" + Params.getSiteURL() + "compositions.jsp?mode=" + mode + "&page=" + i + "&ID=" + ID + "\">[" + i + "]</a> ");
                          }
                       }

                       } else {
                          out.println("Ничего не найдено");
                       }
               }
        %>
        <% out.print(Params.getFooter()); %>
    </body>
</html>
